rm(list = ls()) # Borramos variables de environment
# descomentar si es la primera vez (y requieren instalación)
# install.packages("tidyverse")
# install.packages("performance")
# install.packages("olsrr")
# install.packages("corrr")
# install.packages("corrplot")
# install.packages("skimr")
library(tidyverse)
library(performance)
library(olsrr)
library(corrr)
library(corrplot)
library(skimr)Entrega I
Instrucciones (leer antes de empezar)
Modifica de la cabecera del documento
.qmdtus datos personales (nombre y DNI). IMPORTANTE: no modifiques nada más de la cabecera.Asegúrate, ANTES de seguir editando el documento, que el archivo
.qmdse renderiza correctamente y se genera el.htmlcorrespondiente en tu carpeta local de tu ordenador (pulsa el botónRendero guarda el documento conRender on Saveactivado).Los chunks (cajas de código) creados están o vacíos o incompletos, de ahí que la mayoría tengan la opción
#| eval: false. Una vez que edites lo que consideres, debes ir cambiando cada chunck a#| eval: true(o quitarlo directamente) para que se ejecuten.Recuerda que puedes ejecutar chunk a chunk con el botón play o ejecutar todos los chunk hasta uno dado (con el botón a la izquierda del anterior).
IMPORTANTE: solo se podrá subir un archivo
.htmlal campus, no se evaluarán entregas sin el.htmlcorrectamente generado. Recuerda: el código es una herramienta, no el fin en esta asignatura. Se evaluará especialmente las interpretaciones y conclusiones que detalles. Un ejercicio con el código perfecto pero sin ningún tipo de razonamiento, interpretación o conclusión no superará el 4 sobre 10 de nota.
Paquetes necesarios
Necesitaremos los siguientes paquetes (haz play en el chunk para que se carguen):
Caso práctico I: análisis de datos de cáncer
El archivo de datos a usar lo cargaremos desde el csv cancer.csv.
# no cambies código
datos <- read_csv(file = "./cancer.csv")
datos# A tibble: 3,047 × 13
deathRate medIncome popEst2015 povertyPercent studyPerCap MedianAge Geography
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
1 165. 61898 260131 11.2 500. 39.3 Kitsap C…
2 161. 48127 43269 18.6 23.1 33 Kittitas…
3 175. 49348 21026 14.6 47.6 45 Klickita…
4 195. 44243 75882 17.1 343. 42.8 Lewis Co…
5 144. 49955 10321 12.5 0 48.3 Lincoln …
6 176 52313 61023 15.6 180. 45.4 Mason Co…
7 176. 37782 41516 23.2 0 42.6 Okanogan…
8 184. 40189 20848 17.8 0 51.7 Pacific …
9 190. 42579 13088 22.3 0 49.3 Pend Ore…
10 178. 60397 843954 13.1 428. 35.8 Pierce C…
# ℹ 3,037 more rows
# ℹ 6 more variables: AvgHouseholdSize <dbl>, PercentMarried <dbl>,
# PctHS25_Over <dbl>, PctUnemployed16_Over <dbl>, PctPrivateCoverage <dbl>,
# BirthRate <dbl>
Los datos representan diferentes características socioeconómicas de distintas regiones, extraídas de the American Community Survey (census.gov), clinicaltrials.gov, y cancer.gov.
¿Nuestro objetivo? Ser capaces de predecir la variable deathRate, nuestra variable objetivo, que representa la mortalidad media de cancer, por cada 100 000 habitantes. La idea es que seamos capaz de determinar cual de las variables es la que más efecto (lineal) tiene en la mortalidad de cáncer, realizando el ajuste posterior.
El resto de variables son:
medianIncome: mediana de los ingresos de la región.popEst2015: población de la regiónpovertyPercent: porcentaje de población en situación de pobreza.studyPerCap: ensayos clínicos relacionados por el cáncer realizados por cada 100 000 habitantes.MedianAge: edad mediana.Geography: nombre de la región.AvgHouseholdSize: tamaño medio de los hogares.PercentMarried: porcentaje de habitantes casados.PctHS25_Over: porcentaje de residentes por encima de los 25 años con (máximo) título de bachillerato.PctUnemployed16_Over: porcentaje de residentes de más de 16 años en paro.PctPrivateCoverage: porcentaje de residentes con seguro de salud privado.BirthRate: tasa de natalidad.
IMPORTANTE: siempre que puedas, relaciona los valores numéricos de la salida de R con su fórmula.
Ejercicio 1
Ejecuta el código que consideres para chequear que a) todas las variables son numéricas; b) no hay datos ausentes; c) no hay problemas de rango/codificación. En caso de que alguna de ellas no se cumpla, ejecuta el código que consideres para corregirlo y/o eliminar las variables que consideres. Sé conciso en el código.
# Escribe el código que consideres
datos_preproc <-
datos |> ...[Escribe en el chunk el código que consideres para responder la pregunta y aquí debajo como texto normal lo que consideres para responder, borrando esta frase]
Ejercicio 2
Realiza un primer análisis exploratorio para entender nuestros datos (cada variable por separado). Hazlo tanto de manera numérica como de manera visual (no hace falta que ejecutas 19 000 gráficos, decide uno de los aprendidos para ello y saca conclusiones, al grano). ¿Hay datos atípicos?
# Escribe el código que consideres[Escribe en el chunk el código que consideres para responder la pregunta y aquí debajo como texto normal lo que consideres para responder, borrando esta frase]
Ejercicio 3
Nuestro objetivo será predecir la mortalidad de cáncer. De momento trabajaremos en el contexto de la regresión univariante, así que lo primero que haremos tras preprocesar y entender los datos será seleccionar la variable predictora que mayor efecto lineal tenga respecto a la variable objetivo. Hazlo tanto de manera numérica como visual, de manera que puedas descartar correlaciones espúreas (que no haya un dinosaurio, por ejemplo).
# Escribe el código que consideres[Escribe en el chunk el código que consideres para responder la pregunta y aquí debajo como texto normal lo que consideres para responder, borrando esta frase]
Ejercicio 4
Una vez elegida la variable con mayor efecto lineal, el objetivo será usar dicha covariable para predecir la variable objetivo. Lo que haremos será separar las observaciones en dos datasets distintos: un dataset train con el que entrenaremos el modelo (el que usará la regresión para aprender y determinar sus coeficientes) y un segundo dataset test que usaremos en el futuro para obtener predicciones. Para ello realiza un muestreo aleatorio de manera que train contenga el 80% de los datos y test el 20% restante. IMPORTANTE: no cambies la semilla.
set.seed(12345)
# Escribe el código que consideres
train <- datos_preproc |> ...
test <- datos_preproc |> anti...[Escribe en el chunk el código que consideres para responder la pregunta y aquí debajo como texto normal lo que consideres para responder, borrando esta frase]
Ejercicio 5
No usaremos el dataset test hasta el final para evaluar las predicciones (con un dataset que el modelo no conoce). Con el dataset train a) ejecuta el ajuste de una regresión lineal univariante; b) interpreta los coeficientes; c) realiza la diagnosis de la manera más completa posible; d) comenta todo lo que sepas sobre la segunda tabla de la salida (la de inferencia de los parámetros). Elimina variables si su efecto no fuese significativo.
# Escribe el código que consideres
ajuste <- lm(data = train, ...)[Escribe en el chunk el código que consideres para responder la pregunta y aquí debajo como texto normal lo que consideres para responder, borrando esta frase]
Ejercicio 6
¿Se cumplen las hipótesis? Argumenta porqué, más allá de lo que valga luego la bondad de ajuste, es importante que se cumplan.
[Escribe en el chunk el código que consideres para responder la pregunta y aquí debajo como texto normal lo que consideres para responder, borrando esta frase]
Ejercicio 7
Evalua el modelo realizando un ANOVA, detallando y explicando todo lo que puedas cada uno de los elementos. Analiza la bondad de ajuste. ¿Qué % de información explica nuestro modelo? Detalla que implica respecto a la calidad del ajuste (en caso de que lo haga).
# Escribe el código que consideres[Escribe en el chunk el código que consideres para responder la pregunta y aquí debajo como texto normal lo que consideres para responder, borrando esta frase]
Ejercicio 8
Por último, utiliza el dataset test para, aplicando el modelo entrenado, predecir las observaciones de test. Con las observaciones de test construye un nuevo dataset de tres columnas: la variable objetivo, la variable predictora y la predicción. Haz lo mismo con train. Junta ambos datasets con una cuarta variable que nos diga si la observación era de train o de test.
# Escribe el código que consideres[Escribe en el chunk el código que consideres para responder la pregunta y aquí debajo como texto normal lo que consideres para responder, borrando esta frase]
Ejercicio 9
Con el dataset anterior, visualiza de alguna manera la calidad de las predicciones en train y en test (idea: reales vs predicciones) en dos gráficos en el mismo ggplot (pista: la cuarta columna que has añadido antes la puedes usar en un facet). ¿En cuál ha acertado más el modelo? Calcula el \(R^2\) en el dataset de test (piensa como haciendouso de los errores) y compáralo con el obtenido en la salida del
lm()en train.
# Escribe el código que consideres[Escribe en el chunk el código que consideres para responder la pregunta y aquí debajo como texto normal lo que consideres para responder, borrando esta frase]